/***********************************************
 @Name :        小铭同学
 @Time :        2025-08-15
 @Email :       LiaoMingWJ233@163.com
 @Comment :     自定义控件 聊天消息气泡控件
 @FileName :    chatbubble.h
 @Version :     1.0
************************************************/


#ifndef CHATBUBBLE_H
#define CHATBUBBLE_H

#include <QWidget>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPixmap>
#include <QLinearGradient>

/**
 * @brief 聊天消息气泡控件
 * 功能特性：
 * 1. 圆形头像显示（固定40x40）
 * 2. 发送者/接收者不同样式（渐变背景）
 * 3. 精确控制名称与消息框的间距
 * 4. 自适应消息内容高度
 * 5. 名称底部与消息框顶部精确对齐
 */
class ChatBubble : public QWidget
{
    Q_OBJECT
public:
    explicit ChatBubble(QWidget *parent = nullptr);
    ~ChatBubble();
    
    /**
     * @brief 设置消息内容
     * @param avatarPath 头像路径（无效时使用默认头像）
     * @param senderName 发送者名称
     * @param message 消息内容
     * @param isMe 是否是自己发送的消息
     */
    void setMessage(const QString &avatarPath, const QString &senderName, 
                   const QString &message, bool isMe);

protected:
    void paintEvent(QPaintEvent *event) override;

private:
    // UI控件
    QLabel *avatarLabel = nullptr;  // 头像标签
    QLabel *nameLabel = nullptr;    // 发送者名称标签
    QLabel *messageLabel = nullptr; // 消息内容标签
    
    // 布局
    QHBoxLayout *mainLayout = nullptr; // 主布局（水平方向）
    QVBoxLayout *textLayout = nullptr; // 文本布局（垂直方向）
    
    bool m_isMe = false; // 消息方向标识
    
    // 渐变背景
    QLinearGradient m_senderGradient;   // 发送者渐变背景
    QLinearGradient m_receiverGradient; // 接收者渐变背景
    
    /**
     * @brief 创建圆形头像
     * @param avatar 原始头像
     * @param size 输出尺寸
     * @return 圆形头像
     */
    QPixmap roundAvatar(const QPixmap &avatar, int size);
    
    /**
     * @brief 初始化渐变颜色
     */
    void setupGradients();
    
    /**
     * @brief 安全清除布局
     * @param layout 要清除的布局对象
     */
    void clearLayout(QLayout* layout);
    
    /**
     * @brief 计算消息框的理想宽度
     * @return 计算后的宽度（限制在50-300之间）
     */
    int calculateMessageWidth() const;
};

#endif // CHATBUBBLE_H
